home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 2
/
Atari Mega Archive CD - Volume 2.iso
/
8bit
/
cislib_b
/
snkatk.xmo
< prev
next >
Wrap
Text File
|
1995-04-22
|
15KB
|
1 lines
; β∈β∮∩τÆ∈∩÷ÕŒÆ≡τøøÆ°≤¢; Sneak Attack by David Plotkin¢¢MODULE¢¢BYTE¢ ChrBase=756,Max,Bkgrnd=710,¢ Fate=53770,Level=[1],CursIn=752,¢ Stick=632,Ps,Loud=[0],Indx=[0],¢ DownL=[0],DownR=[0],Loud1=[0],¢ Snd1=$D208,Snd2=$D20F,Freq=[169],¢ Wsync=$D40A,Colbk=$D018,¢ Nmien=$D40E,Hard=[15],¢ Consol=53279¢¢CARD¢ Scrn=88,RamSet,HiMem=$2E5,¢ Score=[0],Comp=[300],Sdlst=560,¢ Vdslst=512¢¢CARD ARRAY Linept(24)¢¢BYTE ARRAY¢ Charset,Chopperstatus(30),¢ Chopperx(30),Choppery(30),¢ Expx(60),Expy(60),ExpStatus(60),¢ TrStatus(30),Trx(30),Try(30),¢ MisStatus(30),Misx(30),Misy(30),¢ Ll(20),Rr(20),Dlist,¢ ShapeTable(0)=¢ [254 16 124 71 127 12 62 0¢ 127 8 62 226 254 24 126 0¢ 96 96 48 48 24 60 231 255¢ 24 24 24 24 24 60 231 255¢ 6 6 12 12 24 60 231 255¢ 128 85 17 66 24 170 91 131¢ 60 126 255 255 195 66 36 24¢ 60 36 24 255 60 24 36 102¢ 0 0 0 0 0 0 0 0¢ 60 36 24 255 60 24 36 102¢ 60 36 219 255 60 24 36 102¢ 60 60 24 60 60 24 24 28¢ 60 60 24 60 60 60 102 195]¢¢PROC Download()¢;Step back HiMem and move the¢;character set into RAM¢CARD Index¢BYTE Val¢ RamSet=(HiMem-$400)&$FC00¢ ChrBase=RamSet RSH 8¢ HiMem=RamSet¢ FOR Index=0 TO 1023 DO¢ Val=Peek(57344+Index)¢ Poke(RamSet+Index,Val)¢ OD¢ Charset=RamSet¢RETURN¢¢PROC Dlint()¢;the display list interrupt routine¢ [$48 $8A $48 $98 $48]¢ Wsync=1¢ Colbk=50¢ [$68 $A8 $68 $AA $68 $40]¢¢PROC Scoreline()¢;set up the dli¢ Dlist=Sdlst¢ Vdslst=Dlint¢ Dlist(27)=130¢ Nmien=$C0¢RETURN¢¢PROC Update()¢;print score and level¢ Position(1,23)¢ Print("Score: ")¢ Position(8,23)¢ PrintC(Score)¢ Position(18,23)¢ Print("Level: ")¢ Position(25,23)¢ PrintB(Level)¢RETURN¢¢PROC Title()¢BYTE colpf0=53270,colpf1=53271,¢ colpf2=53273,colpf3=53273,¢ rtclock=20,vcount=54283¢ Graphics(18)¢ Position(3,4)¢ PrintD(6,"SNEAK ATTACK")¢ Position(8,5)¢ PrintD(6,"BY")¢ Position(3,7)¢ PrintD(6,"david plotkin")¢ Position(3,9)¢ PrintD(6,"ספדצצ ≤⌠β≥⌠")¢ WHILE Consol<>6 DO¢ colpf3=Fate¢ Wsync=0¢ colpf0=128-vcount+rtclock RSH 2¢ colpf1=vcount+rtclock RSH 2¢ OD¢RETURN¢¢PROC Gr0Init()¢;Set up the address of each screen¢;line and initialize¢CARD xx¢ Graphics(0)¢ CursIn=1¢ Print(" ")¢ FOR xx=0 TO 23 DO¢ Linept(xx)=Scrn+(40*xx)¢ OD¢ FOR xx=0 TO 29 DO¢ Chopperstatus(xx)=0¢ Chopperx(xx)=0¢ Choppery(xx)=0¢ Misx(xx)=0¢ Misy(xx)=0¢ MisStatus(xx)=0¢ TrStatus(xx)=0¢ OD¢ FOR xx=0 TO 59 DO¢ ExpStatus(xx)=0¢ OD¢ FOR xx=0 TO 19 DO¢ Ll(xx)=0¢ Rr(xx)=0¢ OD¢ Bkgrnd=0¢ Update()¢RETURN¢¢PROC Plot0(BYTE x,y,ch)¢;Plot a char at location x,y¢BYTE ARRAY line¢ line=Linept(y)¢ line(x)=ch¢RETURN¢¢BYTE FUNC Locate0(BYTE x,y)¢;Returns the value of the char at x,y¢BYTE ARRAY line¢ line=Linept(y)¢RETURN(line(x))¢¢PROC Noise()¢;the explosion noises¢ IF Loud=0 AND Loud1=0¢ AND Freq=169 THEN¢ RETURN¢ FI¢ IF Loud THEn¢ Loud==-2¢ Sound(0,90,8,Loud)¢ FI¢ IF Loud1 THEN¢ Loud1==-2¢ Sound(1,150,8,Loud1)¢ FI¢ IF Freq<168 THEN¢ Freq==+8¢ Sound(2,Freq,10,4)¢ ELSE¢ Freq=169¢ Sound(2,0,0,0)¢ FI¢RETURN¢¢PROC HitChute(BYTE wh)¢;see which chute was hit by missile wh¢BYTE lp¢ FOR lp=0 TO 29 DO¢ IF Misx(wh)=Trx(lp) AND¢ (Misy(wh)=Try(lp) OR¢ Misy(wh)=Try(lp)+1) THEN¢ TrStatus(lp)=2¢ Plot0(trx(lp),Try(lp),0)¢ Plot0(Trx(lp),Try(lp)+1,10)¢ Plot0(Trx(lp),Try(lp)+2,0)¢ EXIT¢ FI¢ OD¢ IF Try(lp) LSH 3 < Freq THEN¢ Freq=Try(lp) LSH 3¢ FI¢RETURN¢¢PROC HitMan(BYTE wh)¢;see which man was hit by missile wh¢BYTE lp¢ FOR lp=0 TO 29 DO¢ IF Misx(wh)=Trx(lp) AND¢ (Misy(wh)=Try(lp)+1 OR¢ Misy(wh)=Try(lp)+2) THEN¢ TrStatus(lp)=3¢ Plot0(Trx(lp),Try(lp)+1,6)¢ Plot0(Trx(lp),Try(lp),0)¢ Plot0(Trx(lp),Try(lp)+2,0)¢ FI¢ OD¢ Loud1=12¢RETURN¢¢PROC ExplodeChopper(BYTE lp)¢;explosions in place of Chopper lp¢BYTE lq¢ FOR lq=0 TO 59 STEP 2 DO ;find empty¢ IF ExpStatus(lq)=0 THEN¢ ExpStatus(lq)=1 ¢ ExpStatus(lq+1)=1¢ Expx(lq)=Chopperx(lp)¢ Expx(lq+1)=Chopperx(lp)+1¢ Expy(lq)=Choppery(lp)¢ Expy(lq+1)=Choppery(lp)¢ Chopperstatus(lp)=0¢ Plot0(Expx(lq),Expy(lq),6)¢ Plot0(Expx(lq+1),Expy(lq+1),6)¢ EXIT¢ FI¢ OD¢RETURN¢¢PROC HitChopper(BYTE wh)¢;which chopper was hit by missile wh¢BYTE lp¢ FOR lp=0 TO 29 DO¢ IF Misy(wh)=Choppery(lp) AND¢ (Misx(wh)=Chopperx(lp) OR¢ Misx(wh)=Chopperx(lp)+1) THEN¢ ExplodeChopper(lp)¢ EXIT¢ FI¢ OD¢ Loud=12¢RETURN¢¢PROC MissileHit(BYTE wh)¢;see if missile wh hit anything¢BYTE dum¢ dum=Locate0(Misx(wh),Misy(wh))¢ IF dum=0 THEN¢ Plot0(Misx(wh),Misy(wh),84)¢ RETURN¢ FI¢ MisStatus(wh)=0¢ IF dum=1 OR dum=2 THEN¢ HitChopper(wh)¢ Score==+1¢ ELSEIF (dum=7 AND Indx<6 OR¢ dum=8 AND Indx>3) THEN¢ HitChute(wh)¢ Score==+2¢ ELSEIF (dum=8 AND Indx<4 OR¢ dum=9 AND Indx>1) THEN¢ HitMan(wh)¢ Score==+1¢ FI¢RETURN¢¢PROC Modify()¢;Modify the RAM character set¢CARD xx¢ FOR xx=0 TO 103 DO¢ Charset(xx+8)=ShapeTable(xx)¢ OD¢RETURN¢¢PROC LaunchTrooper(BYTE wh)¢;drop a paratrooper from chopper wh¢BYTE lp¢ IF Fate>240-(Level LSH 1) THEN¢ FOR lp=0 TO 29 DO ;find MT trooper¢ IF TrStatus(lp)=0 THEN ;got one¢ TrStatus(lp)=1¢ Trx(lp)=Chopperx(wh)¢ IF Trx(lp)=0 THEN¢ Trx(lp)=1¢ FI¢ Try(lp)=Choppery(wh)+1¢ Plot0(Trx(lp),Try(lp),7)¢ Plot0(Trx(lp),Try(lp)+1,8)¢ Plot0(Trx(lp),Try(lp)+2,9)¢ EXIT¢ FI¢ OD¢ FI¢RETURN¢¢PROC EraseChopper(BYTE wh)¢;erase chopper number wh¢ Plot0(Chopperx(wh),Choppery(wh),0)¢ Plot0(Chopperx(wh)+1,Choppery(wh),0)¢ Chopperstatus(wh)=0¢ Chopperx(wh)=0¢ Choppery(wh)=0¢RETURN¢¢PROC DrawChopper(BYTE wh)¢;draw chopper number wh¢ Plot0(Chopperx(wh),Choppery(wh),1)¢ Plot0(Chopperx(wh)+1,Choppery(wh),2)¢RETURN¢¢PROC ClearScreen()¢;clear the screen¢BYTE lp¢ FOR lp=0 TO 29¢ DO¢ IF Chopperstatus(lp) THEN¢ EraseChopper(lp)¢ FI¢ IF TrStatus(lp) THEN¢ TrStatus(lp)=0¢ Plot0(Trx(lp),Try(lp),0)¢ Plot0(Trx(lp),Try(lp)+1,0)¢ Plot0(Trx(lp),Try(lp)+2,0)¢ FI¢ IF MisStatus(lp)=1 THEN¢ MisStatus(lp)=0¢ Plot0(Misx(lp),Misy(lp),0)¢ FI¢ OD¢ FOR lp=0 TO 59 STEP 2 DO¢ IF ExpStatus(lp)=1 THEN¢ ExpStatus(lp)=0¢ ExpStatus(lp+1)=0¢ Plot0(Expx(lp),Expy(lp),0)¢ Plot0(Expx(lp+1),Expy(lp+1),0)¢ FI¢ OD¢RETURN¢¢PROC MoveChopper()¢;move the choppers¢BYTE lp,ps=[0]¢ FOR lp=0 TO 29 DO¢ IF Chopperstatus(lp)=1 THEN ;right¢ IF Chopperx(lp)=38 THEN¢ EraseChopper(lp)¢ ELSE¢ Plot0(Chopperx(lp),¢ Choppery(lp),0)¢ Chopperx(lp)==+1¢ DrawChopper(lp)¢ LaunchTrooper(lp)¢ FI¢ FI¢ IF Chopperstatus(lp)=2 THEN ;left¢ IF Chopperx(lp)=0 THEN¢ EraseChopper(lp)¢ ELSE¢ Plot0(Chopperx(lp)+1,¢ Choppery(lp),0)¢ Chopperx(lp)==-1¢ DrawChopper(lp)¢ LaunchTrooper(lp)¢ FI¢ FI¢ OD¢ IF ps=0 THEN ¢ Charset(8)=56¢ Charset(16)=28¢ ps=1¢ ELSE¢ ps=0¢ Charset(8)=254¢ Charset(16)=127¢ FI¢RETURN¢¢PROC LaunchChopper()¢;Decide whether to send off a new¢;chopper, which side, how high up¢BYTE lp¢ IF Fate>230-(Level LSH 1) THEN¢ FOR lp=0 TO 29 DO ;find MT chopper¢ IF Chopperstatus(lp)=0 THEN¢ Choppery(lp)=Rand(Hard)¢ IF Fate>128 THEN¢ Chopperx(lp)=38 ;right side¢ Chopperstatus(lp)=2¢ ELSE¢ Chopperx(lp)=0 ;left side¢ Chopperstatus(lp)=1¢ FI¢ DrawChopper(lp)¢ EXIT¢ FI¢ OD¢ FI¢RETURN¢¢PROC DrawBase()¢;draw the base¢BYTE lp¢ FOR lp=19 TO 21 DO¢ Plot0(lp,22,128)¢ OD¢ Plot0(20,21,4)¢RETURN¢¢PROC AimGun()¢;read the joystick and move the base¢ IF Stick=11 THEN¢ Ps=3¢ ELSEIF Stick=7 THEN¢ Ps=5¢ ELSE¢ Ps=4¢ FI¢ Plot0(20,21,Ps)¢RETURN¢¢PROC Shoot()¢;send off a bullet¢BYTE trig=644,lp,flg=[0]¢ IF trig=1 OR flg=0 THEN¢ flg=1¢ RETURN¢ FI¢ FOR lp=0 TO 29 DO ;find empty shot¢ IF MisStatus(lp)=0 THEN ;got one¢ MisStatus(lp)=1